package com.skyworthclub.competition.service;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.skyworthclub.competition.beans.Match;
import com.baomidou.mybatisplus.service.IService;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author li
 * @since 2018-10-15
 */
@Transactional(rollbackFor = Exception.class)
public interface MatchService extends IService<Match> {


    /** 按id查询
     * @param matchId id
     * @return  Match
     */
    Match selectOne(Integer matchId);

    /** 插入
     * @param match match对象
     * @return  boolean
     */
    boolean insertOne(Match match);

    /** 更新
     * @param match match对象
     * @return boolean
     */
    boolean updateMatchById(Match match);

    /** 更新审核状态
     * @param match match对象
     * @param wrapper   条件
     * @return boolean
     */
    boolean updateCheckedStatus(Match match, Wrapper<Match> wrapper);

    /** 用户删除match
     * @param matchId    matchId
     * @param username  用户名
     * @return boolean
     */
    boolean deleteById(Integer matchId, String username);

    /** 轮播图
     * @return  list
     */
    List<Match> selectCarouselFigure();

    /** 按照日期范围查询
     * @param startDate 开始
     * @param endDate   结束
     * @param page      页码
     * @return  page
     */
    Page<Match> searchByRange(LocalDate startDate, LocalDate endDate, Integer page);

    /** 分页查询
     * @param pageNum   页码
     * @return page
     */
    Page<Match> getPage(Integer pageNum);


    /**
     * @param username  用户名
     * @param pageNum   页码
     * @return  match列表
     */
    Page<Match> getPubCompetition(String username, Integer pageNum);


    /**
     * @param matchIds  比赛id列表
     * @param pageNum   页码
     * @return  match列表
     */
    Page<Match> getPageByMatchIds(List<Integer> matchIds, int pageNum);


    /**
     * @param matchType  比赛类型
     * @param pageNum   页码
     * @return  match列表
     */
    Page<Match> getPageByType(Integer pageNum, Integer matchType);


    /**
     * @param matchLevel  比赛等级
     * @param pageNum   页码
     * @return  match列表
     */
    Page<Match> getPageByLevel(Integer pageNum, Integer matchLevel);

}
